/*
 * Copyright (c) 2023 Cshoo Org. All Rights Reserved.
 */

package org.cshoo.tattoo.datacenter.app;

import org.cshoo.tattoo.datacenter.api.dto.*;
import org.cshoo.tattoo.datacenter.domain.bo.MessageBo;
import org.cshoo.tattoo.datacenter.domain.po.Message;
import org.cshoo.tattoo.datacenter.domain.po.MessageItem;
import org.cshoo.tattoo.datacenter.domain.service.MessageService;
import org.cshoo.tattoo.embed.infra.entity.PageQueryEntity;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 杨翼
 * @since 1.0
 */
@Service
public class MessageAppService {

    @Resource
    private MessageService messageService;

    /**
     * 校验message编号是否存在
     *
     * @param code 编号
     * @return 校验结果
     */
    public boolean checkMessageCodeExists(String code) {
        return messageService.checkMessageCodeExists(code);
    }

    /**
     * 添加message
     *
     * @param addMessageReq 添加message请求DTO
     */
    public void addMessage(AddMessageReq addMessageReq) {
        Message message = new Message();
        BeanUtils.copyProperties(addMessageReq, message);
        messageService.addMessage(message);
    }

    /**
     * 修改message
     *
     * @param updateMessageReq 修改message请求dto
     */
    public void updateMessage(UpdateMessageReq updateMessageReq) {
        Message message = new Message();
        BeanUtils.copyProperties(updateMessageReq, message);
        messageService.updateMessage(message);
    }

    /**
     * 删除message
     *
     * @param id id
     */
    public void deleteMessage(Long id) {
        messageService.deleteMessage(id);
    }

    /**
     * 查询全部message
     *
     * @return message
     */
    public List<Message> queryMessages() {
        return messageService.queryMessages();
    }

    /**
     * 查询message
     *
     * @param pageReqEntity 分页请求对象
     * @return message
     */
    public Page<Message> queryMessages(PageQueryEntity<String> pageReqEntity) {
        return messageService.queryMessages(pageReqEntity);
    }

    /**
     * 校验message item编号是否存在
     *
     * @param code      编号
     * @param messageId message id
     * @return 校验结果
     */
    public boolean checkMessageItemCodeExists(String code, Long messageId) {
        return messageService.checkMessageItemCodeExists(code, messageId);
    }

    /**
     * 添加message item
     *
     * @param addMessageItemReq 添加message item 请求DTO
     * @throws Exception 异常
     */
    public void addMessageItem(AddMessageItemReq addMessageItemReq) throws Exception {
        MessageItem messageItem = new MessageItem();
        BeanUtils.copyProperties(addMessageItemReq, messageItem);
        messageService.addMessageItem(messageItem);
    }

    /**
     * 修改message item
     *
     * @param updateMessageItemReq 修改message item请求dto
     */
    public void updateMessageItem(UpdateMessageItemReq updateMessageItemReq) {
        MessageItem messageItem = new MessageItem();
        BeanUtils.copyProperties(updateMessageItemReq, messageItem);
        messageService.updateMessageItem(messageItem);
    }

    /**
     * 删除message item
     *
     * @param id id
     */
    public void deleteMessageItem(Long id) {
        messageService.deleteMessageItem(id);
    }

    /**
     * 查询message item
     *
     * @param messageId message id
     * @return 查询message
     */
    public List<MessageItem> queryMessageItems(Long messageId) {
        return messageService.queryMessageItems(messageId);
    }

    /**
     * 查询message items
     *
     * @param pageReqEntity 分页查询对象
     * @return message item
     */
    public Page<MessageItem> queryMessageItems(PageQueryEntity<Long> pageReqEntity) {
        return messageService.queryMessageItems(pageReqEntity);
    }

    /**
     * 查询单个message
     *
     * @param code 编号
     * @return message信息
     */
    public QuerySingleMessageResp querySingleMessage(String code) {
        QuerySingleMessageResp result = new QuerySingleMessageResp();
        MessageBo messageBo = messageService.querySingleMessage(code);
        BeanUtils.copyProperties(messageBo, result);
        List<QuerySingleMessageItemResp> messageItems = new ArrayList<>();
        messageBo.getMessageItems().forEach(mi -> {
            QuerySingleMessageItemResp messageItemResp = new QuerySingleMessageItemResp();
            BeanUtils.copyProperties(mi, messageItemResp);
            messageItems.add(messageItemResp);
        });
        result.setQuerySingleMessageItems(messageItems);
        return result;
    }
}
